package com.compass.mobile.framework.utils;

import android.text.InputFilter;
import android.text.Spanned;

/**
 * Description： 数字合汉字的文本过滤器
 * Date:2024/10/14 20:29
 */
public class NumberAndCharInputFilter implements InputFilter {


    /**
     * 当系统使用source的start到end的字串替换dest字符串中的dstart到dend位置的内容时，会调用本方法
     *
     * @param source 新输入的字符串
     * @param start  新输入的字符串起始下标，一般为0（删除时例外）
     * @param end    新输入的字符串终点下标，一般为source长度-1（删除时例外）
     * @param dest   输入之前文本框内容
     * @param dstart 原内容起始坐标，一般为dest长度（删除时例外）
     * @param dend   原内容终点坐标，一般为dest长度（删除时例外）
     * @return 你希望输入的内容，比如当新输入的字符串为“恨”时，你希望把“恨”变为“爱”，则return "爱"
     */
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

        for (int i = start; i < end; i++) {
            char c = source.charAt(i);
            if (!Character.isLetterOrDigit(c) && !Character.isWhitespace(c)) {
                return "";
            }
        }
        return null; // 接受输入的字符
    }

    private boolean isNumeric(char c) {
        return c >= '0' && c <= '9'; // 判断是否是数字
    }

    private boolean isChineseCharacter(char c) {
        Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
        return ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
                || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
                || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
                || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
                || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
                || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS;
    }
}
